#include <ESP8266WiFi.h>

const char *ssid = "xxxxxxxx";        // wifi名称
const char *password = "xxxxxxxx";    // wifi密码
const char *host = "xxx.xxx.xxx.xxx"; // 服务器公网ip
const int httpPort = xx;              // 服务器端口号

WiFiClient client; // 服务器

// 初始化
void setup()
{
    Serial.begin(9600); // 开启串口监视器

    // 连接wifi
    WiFi.begin(ssid, password); // 使用名称和密码链接wifi
    while (WiFi.status() != WL_CONNECTED)
    { // 如果连接成功跳出循环,没成功则一直尝试连接
        delay(500);
    }

    // 向服务器发送连接请求
    delay(100);
    bind_Ser();
}

void loop()
{
    // 监听服务器发来的数据
    if (client.available())
    {
        readData_Ser();
    }
    // 监听串口发来的数据
    if (Serial.available())
    {
        readData_UNO();
    }
}

// 绑定服务器
void bind_Ser()
{
    client.connect(host, httpPort);
    delay(100);                               // 延迟
    client.print("{\"DT\":0,\"Type\":0}EOF"); // 发送数据
}

// 读取从服务器发送来的数据
void readData_Ser()
{
    String data = "";
    while (client.available() > 0)
    {
        data += char(client.read());
        // delay(20);
    }

    if (data != "")
    {
        Serial.println(data); // 打印接受到的数
    }
}

// 读取从Ardunio UNO发送的串口数据
void readData_UNO()
{
    String content = ""; // 清空数据缓存
    char character;      // 读取到的数据

    while (Serial.available())
    {
        character = Serial.read(); // 接收串口传输的数据
        content.concat(character); // 拼接字符串
        // delay(20);
    }

    if (content != "")
    {
        client.print(content); // 向服务器发送数据
    }
}